﻿/*
 * Ejemplo de Statemanager XNA 4.0
 * 
 * 100% XNA & XNACommunity- 2010
 * http://100xna.wordpress.com/
 * http://xnacommunity.codeplex.com
 * 
 */

using System;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework;

namespace StateExample
{
    /// <summary>
    /// Esta clase muestra durante dos segundos la palabra "cargando" y luego pasa al estado "PlayingState"
    /// Como es una nuevo estado, hereda de la clase State
    /// </summary>
    public class LoadingState : State
    {
        public SpriteBatch spriteBatch;        //Spritebatch principal
        public GraphicsDeviceManager graphics; //Graphics

        SpriteFont fuente;
        String cadena;
        Vector2 posicion;

        float tiempo;

        public LoadingState(Game game)
            : base(game)
        {
            spriteBatch = new SpriteBatch(GraphicsDevice);
            graphics = GraphicsManager;

            fuente = Content.Load<SpriteFont>("fuente");

            cadena = "Cargando...";
            //La posicion de la cadena será centrada en la pantalla
            posicion = new Vector2(
                          graphics.PreferredBackBufferWidth / 2 - fuente.MeasureString(cadena).X / 2,
                          graphics.PreferredBackBufferHeight / 2 - fuente.MeasureString(cadena).Y / 2);

            tiempo = 1000;
        }

        /// <summary>
        /// Este metodo sera util para proximas entregas
        /// </summary>
        public void Initialize()
        {

        }

        /// <summary>
        /// Restamos el tiempo transcurrido hasta que llegue a 0.
        /// Cuando llegue a 0, cambiamos de estado
        /// </summary>
        /// <param name="gameTime"></param>
        public override void Update(GameTime gameTime)
        {
            //Logica del estado
            tiempo -= gameTime.ElapsedGameTime.Milliseconds;

            if (tiempo <= 0)
            {
                Manager.EstadoActual = GameStates.PlayingState;
            }
        }

        /// <summary>
        /// Pintamos la cadena
        /// </summary>
        /// <param name="gameTime"></param>
        public override void Draw(GameTime gameTime)
        {
            //Pintar el estado
            spriteBatch.Begin();
            spriteBatch.DrawString(fuente, cadena, posicion, Color.White);
            spriteBatch.End();
        }
    }
}
